package com.spzx.product.service.impl;

import com.spzx.common.core.exception.ServiceException;
import com.spzx.common.security.utils.SecurityUtils;
import com.spzx.product.domain.Brand;
import com.spzx.product.mapper.BrandMapper;
import com.spzx.product.service.IBrandService;
import com.alibaba.cloud.commons.lang.StringUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;

import java.util.List;

import org.springframework.stereotype.Service;

/**
 * <p>
 * 分类品牌 服务实现类
 * </p>
 *
 * @author gax
 * @since 2025-08-23
 */
@Service
public class BrandServiceImpl extends ServiceImpl<BrandMapper, Brand> implements IBrandService {
    // 根据条件关键字，查询品牌列表
    @Override
    public List<Brand> selectBrandList(String name) {
        // 创建条件构造器
        LambdaQueryWrapper<Brand> queryWrapper = new LambdaQueryWrapper<>();
        // 根据品牌名称查询
        queryWrapper.like(StringUtils.isNotEmpty(name), Brand::getName, name);
        // 根据条件查询品牌列表
        return this.list(queryWrapper);
    }

    // 新增品牌
    @Override
    public void add(Brand brand) {
        // ① 封装创建人
        brand.setCreateBy(SecurityUtils.getUsername());
        // ② 保存品牌
        // 需要先根据品牌的名称，查询品牌的数目，以确保品牌的名称是唯一的，不能事先存在
        long count = this.count(new LambdaQueryWrapper<Brand>().eq(Brand::getName, brand.getName()));
        if (count > 0) {
            throw new ServiceException("新增品牌失败，品牌名称已存在");
        }
        // ③ 保存品牌
        // 这里直接调用 MybatisPlus 给业务层提供的 save 方法，传入封装好的品牌对象即可
        this.save(brand);
    }
}
